일은

2014-04-07 4 views
1

난 그냥 프로그램을 구성하는 데 루아를 사용하기 시작하고 난이 문제에 부딪쳤다 : 나는 t = { {2,3,4} {5와 같은 목록의 목록을 가지고일은

, 6,7} }

그리고 목록 t이 특정 요소가있는 경우에보고 싶은, 그리고 그것을 않는 경우 내가

처럼 그 요소를

가 포함 된 하위 목록의 모든 요소를 ​​ACESS 필요

if 2 in t then 
"get all elements in sublist containing 2 and add them" 

그래서 2를 찾으면 결과가 2 + 2 + 3 = 7이 될 필요가 있습니다. 내 목록에는 반복되는 숫자가 없습니다. 이 일을

+1

'2 + 3 + 4 = 9'를 의미합니까? – Kamiccolo

답변

1

간단한 방법 :

local function list_sum(list) 
    assert(list) 

    local tmp_sum = 0 

    for _, value in ipairs(list) do --iterate provided list and sum all values 
     tmp_sum = tmp_sum + value 
    end 

    return tmp_sum 
end 

local function sublist_sum_containing(list, search_for) 
    assert(list) 
    assert(search_for) 

    local ret_val = 0 

    for _, tmp_sublist in ipairs(list) do --iterate list 
     for _, value in ipairs(tmp_sublist) do --iterate each sublist 
      if value == search_for then --look for value 
       -- OMG, we've just found sublist we were looking for! 
       ret_val = list_sum(tmp_sublist) --sum exact sublist values. 

       return ret_val --return sum and exit nested loops 
      end 
     end 
    end 

    return ret_val --zero. (no sublist found) 
end 

당신은 sub_lists의 깊은 세트로 재귀를 사용하는 것이 좋습니다.

+0

이 목록을 반복하지 않고 일치하는 값만 합치시겠습니까? –

+0

'search_for '를 찾는 각 하위 목록을 반복합니다. 그 값이 발견되면 정확한 하위 목록을 반복하여 다시 모든 값을 합산합니다. – Kamiccolo

+0

내가 내 코드에 이것을 적용하고 난이 있습니다, 난에 대한'ipairs (specialquests)에서 퀘스트 수행을 을 \t \t 결과 = ipairs에서 J, 보상 0 \t \t (퀘스트) 수행 \t \t \t 결과 = 결과적 + 보상 \t \t \t 경우 보상 == 상 다음 경우 결과 == -j 다음 (물건) 단부 단부 단부 end' 상품이 찾고있는 요소입니다. 거기에 문제가 있습니까? –

관련 문제