2
KeyValuePair<int, string>[][] partitioned = SplitVals(tsRequests.ToArray());

私が使用する方法についてはあまり心配しないでください。異なる配列に均等に分割された KeyValuePairs のギザギザの配列を取得するとだけ言っておきましょう。

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

int 配列内の int と、keyvaluepairs の配列から別の文字列配列内の文字列を効率的に取得する方法を知る必要があります。そうすれば、両方のインデックスが別々の配列で互いに一致します。

たとえば、int[] 配列と string[] 配列に分割した後、

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"
4

4 に答える 4

8
int[] keys = partitioned.Select(pairs => pairs.Select(pair => pair.Key).ToArray())
    .ToArray();
string[] values = partitioned.Select(pairs => pairs.Select(pair => pair.Value).ToArray())
    .ToArray();
于 2013-01-18T20:08:04.337 に答える
1

始めるためだけに:

    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;
    }
于 2013-01-18T20:08:12.697 に答える
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);
于 2013-01-18T20:09:53.827 に答える
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();
于 2013-01-18T20:06:04.863 に答える