単一のIndexならRemoveメソッドを使えば取り除けますが、複数の項目を同時にRemoveしようとするとうまくいきません。これはひとつの項目を除去するとListのIndexが更新されるので、次のIndexに相当する項目が変わってしまうからです。
Delegateを使ってRemoveAllメソッドを使えばできるようですが、私はこのDelegateがどうも苦手でダメなので、代わりに除去したListを返す関数を作ることで対応してます。
これってたぶん亜流なんでしょうね。
using System.Collections.Generic;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Create Start List
List<int> Ints = new List<int>();
for (int i = 0; i < 100; i += 10)
{
Ints.Add(i);
}
//Create Delete Index List
List<int> Deletes = new List<int>();
Deletes.Add(2);
Deletes.Add(4);
// Do Delete
List<int> result = DeleteFromIndex(Ints, Deletes);
// Show Result
foreach (int value in Ints)
{
Debug.WriteLine(value.ToString());
}
foreach (int value in result)
{
Debug.WriteLine(value.ToString());
}
}
/// <summary>
/// Delete values from index
/// </summary>
/// <param name="inList">Original List</param>
/// <param name="inDeleteIndex">Index list for deletion</param>
/// <returns>Deleted list</returns>
private static List<int> DeleteFromIndex(List<int> inList,List<int> inDeleteIndex)
{
List<int> rt = new List<int>();
for (int i = 0; i < inList.Count; i++)
{
if (!inDeleteIndex.Contains(i))
{
rt.Add(inList[i]);
}
}
return rt;
}
}
}
0 件のコメント:
コメントを投稿