2014-10-23 2 views
0

이것은 논리적인 문제로 머리를 감싸는 것처럼 보입니다.배열 두 개를 하나의 배열로 묶어서 배열합니다.

내가 달성하고자하는 것은 패키지에 총 가치가 동일한 두 세트의 서로 다른 두 제품을 일치시키는 것입니다. 단순 위해서

우리가 [ID, 가격] 쌍

array1 = [id=A,price=1],[id=B,price=2],[id=C,price=3] 
array2 = [id=A,price=2],[id=B,price=1],[id=C,price=1] 

내가 array1 [id A]array2 [id B]
을 결합하는 것입니다에 대한 $ 2 만들 수있는 저렴한 패키지에 두 개의 배열을 가지고 있지만 나는 또한 array1 [id A]을 결합 할 수 있습니다 말할 수 있습니다 array2 [id C]으로 2 달러짜리 패키지를 만듭니다.

그래서 내가 얻으려고하는 것은 전체 값으로 그룹화 할 수있는 패키지 세트입니다. 그러나 첫 번째 배열에서 무엇이 선택되었는지에 따라 결정됩니다.

예 : (순전히 시각화를 위해) :

package1 : 
    total : $2 
    1st option : 
     [id=A,price=1] 
    2nd option 
     [id=B,price=1] 
     [id=C,price=1] 

    package2 : 
    total : $3 
    1st option : 
     [id=A,price=1] 
    2nd option 
     [id=A,price=2] 

package3 : 
    total : $3 
    1st option : 
     [id=B,price=2] 
    2nd option 
     [id=B,price=1] 
     [id=C,price=1] 


임 난 그냥 잘못된 길을 계속 어쩌면 누군가가 날 지점 수, 반복적으로 결과를 반복해야합니다 가정 올바른 방향으로 이것에 대한

답변

0

의사 코드 :

List<Package> results = new ArrayList<>(); 
for(Item item:array1) { 
    if (item.getPrice() < 2) { 
     addAllPackagesStartingWith(item, results); 
    } 
} 

// add all packages where an item from array 1 can be paired with an item in array 2 
void addAllPackagesStartingWith(Item item, List<Package> results) { 
    for (Item array2Item:array2) { 
     if(item.getPrice() + array2Item.getPrice() < 2) { 
      results.add(new Package(item, array2Item)); 
     } 
    } 
} 
+0

빠른 응답을 보내 주시면 감사하겠습니다. 가격이 2보다 낮 으면 확인해야하는 이유는 무엇입니까? – Fuzz

+0

array1의 가격이 2보다 높으면 패키지에 최대 2를 더할 수 없습니다. array1의 가격이 2와 같으면 array2의 항목이 2 달러 이하로 가격이 0이어야합니다. 나는 당신이 각각에서 두 개의 아이템 패키지를 원한다고 추정했다. –

1

최선의 선택은 결과가 계산시 맵 구조의 옵션을 모든 조합에 대한 결과를 계산하고 저장하는 것입니다.

당신이 당신의 클래스 (MyOption)에 대한 사용자 정의 개체를 사용하는 경우 : 당신이 객체 배열을 사용하는 경우

Map<Integer, Map<MyOption, List<MyOption>> result = new HashMap<>(); 

또는 :

Map<Integer, Map<Object[], List<Object[]>> result = new HashMap<>(); 
+0

나는이 옵션을 좋아한다. 나는 네가하는 말을 본다. 나는 그것을 곧 시도 할 것이다. – Fuzz

1

아마 당신은 [가격]을 생성 할 수 있습니다 < -> [상품 목록]지도 key은 가격이며 value은 같은 가격의 상품 목록입니다. 예 : [1] -- [Item A, Item B], [2] -- [Item D, Item E, Item Z]이면지도에서 다른 패키지 기반을 생성 할 수 있습니다.

+0

이것은 큰 감사입니다, 그것은 나에게 좋은 출발점을 제공합니다. 답장을 보내 준 시간에 감사드립니다. – Fuzz

관련 문제