은 당신이 당신의 현재 데이터를 사용하여 설정하는 경우를 구조를 사용하면이 작업을 수행 할 수 있지만 구문이 꽤 좋지는 않습니다. A. Milto가 대답에서 제안한 것과 기본적으로 같습니다. 단, 빈 경로의 경우 예외를 throw하지 않도록 경계 검사가 필요하다는 점만 다릅니다. 당신과 같이 당신의 경로를 정의한다면 : 다음
var arrayPaths = new List<int[,]>();
arrayPaths.Add(new[,] { { 0, 0 }, { 0, 1 }, { 1, 1 }, { 2, 1 } }); // Include: starts with (0, 0)
arrayPaths.Add(new[,] { { 0, 1 }, { 0, 1 }, { 1, 1 }, { 2, 1 } }); // Include: starts with (0, 1)
arrayPaths.Add(new[,] { { 1, 0 }, { 0, 1 }, { 1, 1 }, { 2, 1 } }); // Exclude: starts with (1, 0)
arrayPaths.Add(new int[0,0]); // Exclude: has no data
에서 시작 경로의 일부를 (0, 0) 또는 (0, 1)입니다 :
arrayPaths.Where(p =>
p.GetUpperBound(0) >= 0 &&
p.GetUpperBound(1) >= 1 &&
(
(p[0, 0] == 0 && p[0, 1] == 0) ||
(p[0, 0] == 0 && p[0, 1] == 1)
));
네빌 Nazerane 좋은 제안을했다 그의 의견에서 : 정수 배열이 아닌 다른 데이터 구조를 사용하여 점을 표현하면 훨씬 쉽게 이해할 수있는 코드가 생성되어야합니다.당신이에 관심이
var objectPaths = new List<List<Coordinate>>();
objectPaths.Add(new List<Coordinate> { new Coordinate(0, 0), new Coordinate(0, 1), new Coordinate(1, 1), new Coordinate(2, 1) });
objectPaths.Add(new List<Coordinate> { new Coordinate(0, 1), new Coordinate(0, 1), new Coordinate(1, 1), new Coordinate(2, 1) });
objectPaths.Add(new List<Coordinate> { new Coordinate(1, 0), new Coordinate(0, 1), new Coordinate(1, 1), new Coordinate(2, 1) });
objectPaths.Add(new List<Coordinate>());
이제 경로의 부분 집합 :
public struct Coordinate
{
public Coordinate(int x, int y)
{
X = x;
Y = y;
}
public int X { get; }
public int Y { get; }
public bool Equals(int x, int y) =>
X == x && Y == y;
}
그런 다음이 같은 위에 주어진 경로의 집합을 정의 할 수 있습니다 : 예를 들어, 당신은과 같이 좌표를 정의한다고 가정 :
objectPaths.Where(p => p.Count > 0 && (p[0].Equals(0, 0) || p[0].Equals(0, 1)));
코드에서 경로를 지정하기위한보다 간결한 구문을 원할 경우 경로를 나타내는 매우 간단한 클래스를 고려할 수 있습니다. 예를 들어 :
public class Path : List<Coordinate>
{
public Path() { }
public Path(params (int x, int y)[] coordinates) =>
AddRange(coordinates.Select(c => new Coordinate(c.x, c.y)));
}
지금 당신은 같은 경로의 집합을 정의 할 수 있습니다 :
var paths = new List<Path>();
paths.Add(new Path((0, 0), (0, 1), (1, 1), (2, 1)));
paths.Add(new Path((0, 1), (0, 1), (1, 1), (2, 1)));
paths.Add(new Path((1, 0), (0, 1), (1, 1), (2, 1)));
paths.Add(new Path());
그리고 당신이 원하는 부분 집합을 선택하는 구문은 이전과 동일합니다.
경로가 있기 때문에 항상 2 일 것입니다. 두 속성이있는 좌표 클래스가 있다고 생각하십니까? –
'x [0] [0] == 0 && x [0] [1] == 1'과 같은 것을 의미합니까? –
@NevilleNazerane 다른 옵션이있는 경우 가장 좋지 않을 것입니다. 이미 코드의 다른 부분에서이 '경로'목록을 사용 했으므로 –