查看完整版本 : c#問題,switch同dictionary funcation寫法

leemonkey 2017-10-16 09:00 PM

c#問題,switch同dictionary funcation寫法

[color=#ff0000]以下中文字奇奇怪怪的, 希望你們可看懂....[/color]:smile_42:

新手C#一問....
寫了數年C#...也不知道自己用了甚麽...(switch 同 dictionary)
我想要 switch 同 dictionary 的source code, 它們的原理...

-------------------------------

如果intVal 是1, switch是如何運行到 1:B();break;這行Code的??
要否經過0:A();break;才到 1:B();break;
還是直接跳到去 1:B();break; ???
還是用for的方法一個個條件向下查?
又很像不是...因為switch速度是快過for+if吧...但又是甚麽地方快D...是甚麽原因比較快...:smile_27:


switch(intVal)
{
0:A();break;       
1:B();break;
default:C();break;
}

for(int i = 0; i<2; ++i)
{
if(i==0)
{
  A();
}
else  if(i==1)
{
  B();
}
else
{
  C();
}
}

-------------------------------

Dictionary GetKeyValue 又是如何做到的???
如果 key=1, 如何在Dictionary內找回 value "B"的?
又是否用for的方法一個個條件向下查?
0,"A" 先 -> 之後才到 1, "B"?
還是 跳過 0,"A", 直接到 1, "B"? :smile_41:

Dictionary<int, string> dict = new Dictionary<int, string>()
{
{0, "A"},
{1, "B"},
{2, "C"},
};

string value;
dict.TryGetValue( 0, out value); //A
value = dict[1]; //B

List<string> list = new List<string>()
{
"A",
"B",
"C"
};

list = dict[0];//A
list = dict[1];//B

[[i] 本帖最後由 leemonkey 於 2017-10-16 09:02 PM 編輯 [/i]]

jasonchan35 2017-10-16 09:14 PM

switch 可能會用 jump table 如果 case 多, 又或者做 if else 同樣既 logic 如果 case 少
[url=https://en.wikipedia.org/wiki/Branch_table]https://en.wikipedia.org/wiki/Branch_table[/url]

Dictionary 就

Hash Table
[url=https://en.wikipedia.org/wiki/Hash_table]https://en.wikipedia.org/wiki/Hash_table[/url]

B-Tree
[url=https://en.wikipedia.org/wiki/B-tree]https://en.wikipedia.org/wiki/B-tree[/url]

[url=https://www.youtube.com/watch?v=7bd8JGwXAbs&index=6&list=PLeGk08zVu456ngANo7V1qrI8QKXu682uX]https://www.youtube.com/watch?v=7bd8JGwXAbs&index=6&list=PLeGk08zVu456ngANo7V1qrI8QKXu682uX[/url]

form5 2017-10-16 10:03 PM

[quote]原帖由 [i]leemonkey[/i] 於 2017-10-16 09:00 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=469470348&ptid=26995836][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
以下中文字奇奇怪怪的, 希望你們可看懂....:smile_42:

新手C#一問....
寫了數年C#...也不知道自己用了甚麽...(switch 同 dictionary)
我想要 switch 同 dictionary 的source code, 它們的原理...

---- ... [/quote]
第一個直跳去 case 1
第二個dict[1]  吾會經dict[0]

冩左數年C# ? :funk:

jasonchan35 2017-10-16 10:10 PM

[quote]原帖由 [i]form5[/i] 於 2017-10-16 10:03 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=469473224&ptid=26995836][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]

第一個直跳去 case 1
第二個dict[1]  吾會經dict[0]

冩左數年C# ? :funk: [/quote]

冩 C# 既好處係唔駛理 low level 原理
壞處就係 it can't explain itself about how it works

煙民母親生賤種 2017-10-17 03:23 AM

[quote]原帖由 [i]jasonchan35[/i] 於 2017-10-16 09:14 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=469470980&ptid=26995836][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
switch 可能會用 jump table 如果 case 多, 又或者做 if else 同樣既 logic 如果 case 少
[url=https://en.wikipedia.org/wiki/Branch_table]https://en.wikipedia.org/wiki/Branch_table[/url]

Dictionary 就

Hash Table
[url=https://en.wikipedia.org/wiki/Hash_table]https://en.wikipedia.org/wiki/Hash_table[/url] ... [/quote]

hash table 呢個圖個 bucket 即係點樣做到 key 同 entry 對應?? :fst_007:

[img]https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Hash_table_5_0_1_1_1_1_1_LL.svg/900px-Hash_table_5_0_1_1_1_1_1_LL.svg.png[/img]
同埋, 你段 C++ 片無咩唔好, 衰在佢:
1) 佢將 pointer 粒 * 放在個 type 度, 其實放在 variable 度會清晰好多
2) 佢 {} 咁擺...
function a(){
}
其實應該
function a()
{
}

3) 佢用 vs 呢個 ide 寫 C++ , 我個人覺得比較麻煩

[[i] 本帖最後由 煙民母親生賤種 於 2017-10-17 04:59 AM 編輯 [/i]]

煙民母親生賤種 2017-10-17 03:26 AM

case switch(x) 可能係逐個 case check , 即係
switch(c)
case a;
case b;
case c;
case d;

如果係c, 咁可能真係要經過 a, b 呢 2 段 code, 否則唔洗加個 break 落去... :fst_016:

jasonchan35 2017-10-17 04:50 AM

[quote]原帖由 [i]煙民母親生賤種[/i] 於 2017-10-17 03:23 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=469484634&ptid=26995836][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]


hash table 呢個圖個 bucket 即係點樣做到 key 同 entry 對應?? :fst_007:

[url=https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Hash_table_5_0_1_1_1_1_1_LL.svg/900px-Hash_table_5_0_1_1_1_1_1_LL]https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Hash_table_5_0_1_1_1_1_1_LL.svg/900px-Hash_table_5_0_1_1_1_1_1_LL[/url] ... [/quote]

Bucket 只會有個 hash code 之後仲要係後面個 linked list 逐個 search

係 Time 12:40 有解釋, 唔明再問
[url=https://www.youtube.com/watch?v=7bd8JGwXAbs&index=6&list=PLeGk08zVu456ngANo7V1qrI8QKXu682uX]https://www.youtube.com/watch?v=7bd8JGwXAbs&index=6&list=PLeGk08zVu456ngANo7V1qrI8QKXu682uX[/url]

[[i] 本帖最後由 jasonchan35 於 2017-10-17 07:40 AM 編輯 [/i]]

jasonchan35 2017-10-17 07:28 AM

同埋, 你段 C++ 片無咩唔好, 衰在佢:
> 1) 佢將 pointer 粒 * 放在個 type 度, 其實放在 variable 度會清晰好多
C 既時候係放 var 度, 去到 C++ 時因為大家認為 "int*" 先係個 type, 所以放 type 度
情況同 C# array 一樣 int[] a, 因為 int[] 先係個 type

> 2) 佢 {} 咁擺...
> function a(){
> }
> 其實應該
> function a()
> {
> }
依個真係習慣問題, 不過無論自己用邊個都好, 要習慣兩款都睇得掂, 因為兩種都好常用, 睇人地既 code 無得避免

> 3) 佢用 vs 呢個 ide 寫 C++ , 我個人覺得比較麻煩
打 code, press F5 就係咁簡單
IDE 既野無咩所謂, VC 又好 Xcode 又好, vi + makefile 我都係咁用

sinson123 2017-10-24 01:13 AM

[quote]原帖由 [i]煙民母親生賤種[/i] 於 2017-10-17 03:26 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=469484677&ptid=26995836][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
case switch(x) 可能係逐個 case check , 即係
switch(c)
case a;
case b;
case c;
case d;

如果係c, 咁可能真係要經過 a, b 呢 2 段 code, 否則唔洗加個 break 落去... :fst_016: [/quote]
但a同b係唔會執行,只會執行c同d。個break唔係用黎離開switch?

jasonchan35 2017-10-24 01:32 AM

[quote]原帖由 [i]sinson123[/i] 於 2017-10-24 01:13 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=469830424&ptid=26995836][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]

但a同b係唔會執行,只會執行c同d。個break唔係用黎離開switch? [/quote]
In C/C++
switch(x) {
  case a: printf("AAA");  // no break !!!
  case b: printf("BBB");
}
result when x == b:
"AAABBB"

一個 extreme example (睇下好, 唔好用)
[url]https://en.wikipedia.org/wiki/Duff%27s_device[/url]

Susan﹏汪汪 2017-10-24 09:43 AM

有冇人試過C++同C#
分別用link list同Linear probing處理collision去做速度比較?
頁: [1]
查看完整版本: c#問題,switch同dictionary funcation寫法