2013-01-18 138 views
0
KeyValuePair<int, string>[][] partitioned = SplitVals(tsRequests.ToArray()); 

不要太擔心我使用的方法;讓我們只是說我得到了一個KeyValuePairs的鋸齒陣列,這些陣列被平分爲不同的陣列。將KeyValuePair <int,string>轉換爲int []數組和字符串[]數組

foreach (KeyValuePair<int, string>[] pair in partitioned) 
{ 
    foreach (KeyValuePair<int, string> k in pair) 
    { 
    } 
} 

我需要知道我怎樣才能最有效地獲得int數組的整數和字符串從keyvaluepairs的陣列一個單獨的字符串數組。這樣,兩個索引都可以在單獨的數組中匹配。

例如,在我將它分成一個int []數組和一個字符串[]數組,

intarray[3] must match stringarray[3] just like it did in the keyvaluepair. 

可以說我有與KVP交錯數組等:

[1][]<1,"dog">, <2,"cat"> 
    [2][]<3,"mouse">,<4,"horse">,<5,"goat"> 
    [3][]<6,"cow"> 

我這需要在每次迭代

1. 1,2/"dog","cat" 
    2. 3,4,5/"mouse", "horse", "goat" 
    3. 6/"cow" 

回答

5
012變成
+0

所以我甚至不需要把th在循環內? – Ramie

+1

'SelectMany'和'Select'方法都會在內部循環提供給它們的序列,因此循環正在發生,您不需要自己編寫它們。 – Servy

+0

你做了我想要的KVP,但不是我想要的整體。 第一個循環需要發生,無論它只是我想要避免的第二個循環。我基本上將我的keyvalpair數組分成更多的數組,但我不想把它們全部放在2個大列表中。每次循環時我都想將每個部分放在列表中。 – Ramie

0
List<int> keys = new List<int>(); 
List<string> values = new List<string>(); 
foreach (KeyValuePair<int, string>[] pair in partitioned) 
{ 
    foreach (KeyValuePair<int, string> k in pair) 
    { 
     keys.Add(k.Key); 
     values.Add(k.Value); 
    } 
} 
keyArray = keys.ToArray(); 
valueArray = values.ToArray(); 
0

只是爲了讓你開始:

var list = new List<KeyValuePair<int, int>>(); 
    var key = new int[list.Count]; 
    var values = new int[list.Count]; 
    for (int i=0; i < list.Count ;i++) 
    { 
     key[i] = list[i].Key; 
     values[i] = list[i].Value; 
    } 
0
public static void ToArrays<K,V>(this IEnumerable<KeyValuePair<K,V>> pairs, 
    out K[] keys, out V[] values) 
{ 
    var keyList = new List<K>(); 
    var valueList = new List<V>(); 
    foreach (KeyValuePair<K,V> pair in pairs) 
    { 
     keyList.Add(pair.Key); 
     valueList.Add(pair.Value); 
    } 
    keys = keyList.ToArray(); 
    values = valueList.ToArray(); 
} 

因爲你有一個交錯數組,你還需要壓平使用該功能:

public static IEnumerable<T> flatten(this T[][] items) 
{ 
    foreach(T[] nested in items) 
    { 
     foreach(T item in nested) 
     { 
     yield return item; 
     } 
    } 
}  

整合所有像這樣:

MyKeyValuePairCollection = GetKeyValuePairJaggedArray(); 
int[] keys; 
string[] values; 
MyKeyValuePairCollection.flatten().ToArrays(out keys, out values); 
+0

請注意,他有一組鋸齒形的鍵值對。這不是'IEnumerable >'。這是一個'IEnumerable KeyValuePair >>'。 – Servy

+0

我仍然使用上面的功能,但有額外的代碼來首先弄平鋸齒;) –

+1

我的觀點是這就是你想念的東西。您應該添加相關的功能來平整列表。 – Servy