2011-08-22 55 views
3

其實我正在處理我自己的線索的示例代碼,我輸入一個手機號碼,然後單擊按鈕,表單將在該窗體上打開我想顯示從字符串[]陣列中的形式提供該coresponding數如何獲得名稱形式的字符串[]數組比較給出的數字

假設我有

string[] User = { "XYZ", "ABC", "DEF" }; 
string[] Number = { "1234567890", "2345678901", "345678901" }; 

假設我輸入1234567890並點擊進入我想以顯示相應的名稱的名稱從列表中可以看到,例如XYZ

我不知道我是否清楚或不清楚我的問題,但它類似於找到可用的聯繫人。

沒有更好的方法,請讓我知道..

回答

6

使用Dictionary<long, string>是什麼您這裏需要。

Dictionary<long, string> nameFromNumber = new Dictionary<long, string>(); 

nameFromNumber.Add(1234567890, "XYZ"); 
nameFromNumber.Add(2345678901, "ABC"); 
... 

然後找到插入的數目,你可以做名稱:

long numberToCheck = 12364567890; 
if (nameFromNumber.ContainsKey(numberToCheck)//Contains(numberToCheck) 
{ 
    string name = nameFromNumber[numberToCheck]; 
    ... 
} 

編輯:簽名更改爲長的不是int,這要歸功於@Kirill如何指出這一點,不管怎樣我個人會使用字符串代替我的方法會接受這樣的數字更通用的格式012-3456789

+0

'2345678901'將拋出'OverflowException': - )改用'uint/long/ulong'。 –

+0

我可以在這裏用長 – Vivekh

+2

爲什麼不可以? ______ –

1

你可以使用LINQ:

var result = 
    Number.Zip(User, (a, b) => new { a, b }).ToDictionary(k => k.a, v => v.b); 

Console.WriteLine(result["1234567890"]); 
1

使用Array.IndexOf查找第一個數組內的項目的索引。然後使用該索引在第二個數組中找到相應的值。

int index = Array.IndexOf(Number, "1234567890"); 
string name = User[index]; 

但是,在這裏將一個值映射到另一個值的結構會更好。在C#中Dictionary類有這個功能,例如:

var peeps = new Dictionary<string, string> { 
               { "1234567890", "Bob" }, 
               ... 
              }; 
var peep = peeps["1234567890"]; // will throw if doesn't exist 

處理缺失條目:

var peep; 
if (!peeps.TryGet(number, out peep)) throw new SomeException("Nobody with that number."); 
0

希望這有助於:

// Assuming you have entered a number in a textbox 
string[] User = { "XYZ", "ABC", "DEF" }; 
string[] Number = { "1234567890", "2345678901", "345678901" }; 
foreach(string s in Number) 
{ 
if(s == textBox1.Text) 
{ 
MessageBox.Show(User[s]); 
} 
}