2010-06-14 7 views
3

벡터를 매핑하는 좋은 방법이 있습니까? 여기에 무슨 뜻인지의 예 :.매핑 벡터

vec0 = [0,0,0,0,0,0,0,0,0,0,0] 
vec1 = [1,4,2,7,3,2] 
vec2 = [0,0,0,0,0,0,0,0,0] 
vec2 = [7,2,7,9,9,6,1,0,4] 
vec4 = [0,0,0,0,0,0] 

mainvec = 
[0,0,0,0,0,0,0,0,0,0,0,1,4,2,7,3,2,0,0,0,0,0,0,0,0,0,7,2,7,9,9,6,1,0,4,0,0,0,0,0,0] 

당신이 마음에 일반 데이터 구조를 볼 수 있도록 mainvec (나는 당신에게 그것을 보여주는거야 존재하지 않는 말을하자이

지금은 싶은 말 mainvec (12)는 4가 될 것입니다.이 벡터들의 호출을 mainvec에 결합하지 않고 매핑하는 좋은 방법이 있습니까? mainvec의 인덱스를 테스트하는 if 문을 여러 개 만들 수 있습니다. 호출이 벡터 중 하나에있는 위치에 따라 각 호출을 오프셋합니다. 예를 들어

mainvec(12) = vec1(1) 
,210

으로 내가 할 수있는 : 내가 if 문없이이 일을 간결한 방법이 궁금

mainvec(index) 
if (index >=13) 
    vect1(index-11); 

. 어떤 아이디어?

+0

실제로 맵을 사용하여이 문제를 해결했습니다. 결국, 벡터를 연결하려고했지만 프로그램을 컴파일하는 데 너무 오래 걸렸습니다 (실제 벡터 합은 2^32 개 요소입니다). 요소의 인덱스는 실제로 디자인의 데이터만큼 중요하므로 메모리가 할당되면 동적으로 커지는지도를 만들었습니다. 10230230 위치에 뭔가가 필요할 때 해당 키가 들어있는 요소에 액세스 할 수 있습니다. –

답변

1

이와 비슷한 제품을 찾고 계십니까?

using System.Collections.Generic; 
namespace Test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int[] vec0 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 
      int[] vec1 = { 1, 4, 2, 7, 3, 2 }; 
      int[] vec2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 
      int[] vec3 = { 7, 2, 7, 9, 9, 6, 1, 0, 4 }; 
      int[] vec4 = { 0, 0, 0, 0, 0, 0 }; 
      List<int> temp = new List<int>(); 
      temp.AddRange(vec0); 
      temp.AddRange(vec1); 
      temp.AddRange(vec2); 
      temp.AddRange(vec3); 
      temp.AddRange(vec4); 
      int[] mainvec = temp.ToArray(); 
     } 
    } 
} 
+0

@ckramer : 동일한 결과를 얻으려면 링을 사용하십시오. var mainvec = vec0.Concat (vec1) .Concat (vec2) .Concat (vec3) .Concat (vec4) .ToArray() –

1

지그재그 배열을 사용합니다.

당신은 여전히 ​​루프가 있어야하지만 중복없이 별도의 벡터를 유지할 수 있습니다 : 나는 길이의 배열을받을 클래스를 만들 것이다

var mainvec = new int[][]{vec0, vec1, vec2, vec3, vec4}; 

int desiredInd = 12, totalInd = 0, rowInd = 0, result; 

while(rowInd < mainvec.Length && (totalInd + mainvec[rowInd].Length) <= desiredInd) 
{ 
    totalInd += mainvec[rowInd++].Length; 
} 

if(rowInd < mainvec.Length && (desiredInd - totalInd) < mainvec[rowInd].Length) 
{ 
    result = mainvec[rowInd][desiredInd - totalInd]; 
} 
1

하고 배열 번호를 부여하는 방법을 및 결합 된 목록에서 주어진 색인에 대한 배열 내부 색인.

실제 배열을 참조하는 클래스와 올바른 요소를 가져 오는 인덱서로 래핑됩니다.

1

기본 목록 연결을 수행하는 것처럼 보입니다.이 경우 Concat 함수는 작업을 수행하는 가장 직접적인 방법입니다. , somethng 같은 실시간 라이브 코드 측면에서 :

var vec0 = new[] {0,0,0,0,0,0,0,0,0,0,0}; 
var vec1 = new[] {1,4,2,7,3,2}; 
var vec2 = new[] {0,0,0,0,0,0,0,0,0}; 
var vec3 = new[] {7,2,7,9,9,6,1,0,4}; 
var vec4 = new[] { 0, 0, 0, 0, 0, 0 }; 

var mainvec = vec0.Concat(vec1).Concat(vec2).Concat(vec3).Concat(vec4).ToList(); 
mainvec[12] == 1; 

나는 당신이하고 싶은, 그래서 일을 더 직접적인 방법이 될 것인가 뒤 문맥 정말 모르겠지만, 내용에 따라 너는있어,이게 나에게 가장 간단한 것 같다.