2
List<Node> resultList = new List<Node>();
NodeEqualityComparer comparer = new NodeEqualityComparer();

foreach (Vector3 move in moveList)
{
    foreach (Node sight in sightList)
    {
        if (comparer.Equals((Vector3)sight.position, move))
            resultList.Add(sight);
    }
}

このソースを linq に変更するにはどうすればよいですか?

4

3 に答える 3

3
var resultList = moveList.SelectMany(m => sightList.Where( s => comparer
                                       .Equals((Vector3)s.position, m)).ToList();
于 2013-04-25T08:42:46.557 に答える
1

次のようなものが必要なため、これはより効率的ですjoin

List<Node> resultList = moveList
    .Join(sightList, m => m, s => (Vector3)s.position, (m, s) => s, comparer)
    .ToList();
于 2013-04-25T08:57:13.350 に答える
0

本当にLINQバージョンに変更する必要があるかどうかはわかりません...

List<Node> resultList;
NodeEqualityComparer comparer = new NodeEqualityComparer();

resultList = (from m in moveList
             from s in sightList
             where comparer.Equals((Vector3)s.position, m)
             select s).ToList();
于 2013-04-25T08:40:27.393 に答える