10000 個の値を含む配列があり、配列から 50 個の項目を取得して、いくつかの文字列操作を実行したいと考えています。LINQ または FOR ループを使用してどうすればよいですか。前もって感謝します。
質問する
428 次
6 に答える
2
次のように、ループ内でSkip
andを使用できます。Take
for
for (int pos = 0 ; pos < values.Length ; pos += 50) {
var subArray = values.Skip(pos).Take(50).ToArray();
}
注: がvalues
配列またはList<String>
.
ただし、これは最も効率的な方法ではありません。LINQ をまったく使用せず、Array.Copy
代わりにメソッドを使用する方がよいでしょう。
var subArray = new String[50];
for (int pos = 0 ; pos < values.Length ; pos += 50) {
Array.Copy(values, pos, subArray, 0, 50);
}
上記のソリューションではsubArray
、実行する予定の処理の一部として保存されず、values.Length
50 で割り切れる (10000 アイテムの場合) 必要があります。
于 2013-11-12T17:17:34.933 に答える
1
あなたはただ使うことができますGetRange
List<string> elements = yourArray.ToList();
if (null != elements && elements.Count > 50)
{
for (int i = 0; i < elements.Count; i += 50)
{
Array result = elements.GetRange(i,50).ToArray();
// here you can pass the retrived list to your private method to do the necessary functionility.
StringOperationForArray(result);
}
}
于 2013-11-12T17:36:30.100 に答える
0
どうぞ:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication2
{
class Program
{
const int chunkSize = 50;
static void Main(string[] args)
{
var bigList = Enumerable.Range(0, 10000).Select(s => s.ToString()).ToList();
ChunkerProcess(bigList, i => { Console.WriteLine(i); });
}
private static void ChunkerProcess<T>(List<T> bigList, Action<T> action )
{
int pointer = 0;
List<T> chunks = bigList.GetRange(0, chunkSize>bigList.Count?bigList.Count:chunkSize);
while (chunks.Count > 0)
{
foreach (var chunk in chunks)
{
action.Invoke(chunk);
}
chunks.Clear();
if (chunkSize * pointer < bigList.Count)
{
chunks = bigList.GetRange(chunkSize * pointer, chunkSize * (pointer + 1) > bigList.Count ? bigList.Count - chunkSize * pointer : chunkSize);
pointer++;
}
}
}
}
}
于 2013-11-12T17:30:51.867 に答える