2017-03-25 1 views
3

비슷한 엔티티 그룹을 삽입하고 각각의 ID를 하나씩 가져오고 싶습니다.루프의 결과를 변수 목록에 저장하십시오.

q1 = "question1" 
q2 = "question2" 
q3 = "question3" 
q4 = "question4" 

Enum.each([q1, q2, q3, q4], &(Repo.insert!(......))) 

# working with q1 and id of q1 
# ....... 


# working with q2 and id of q2 
# ....... 

# and so on 

는, 아마도, 내가 Repo.insert에 의해 반환 된 결과 모델을 저장하는 것 변수의 두 번째 목록을 만들 수있는 방법이 있나요 :이 노력하고있어? 그렇다면 삽입 된 각 모델의 "id"에 어떻게 액세스합니까? q1-q4? 아니면 대신 하나씩 삽입해야합니까? 쉽고 간단합니다.

답변

1

당신은 Enum.map/2 찾고 :

ids = [q1, q2, q3, q4] 
|> Enum.map(&Repo.insert!(......)) 
|> Enum.map(&Map.get(&1, :id)) 

또한 단계에서이 작업을 수행 할 수 있습니다

structs = Enum.map([q1, q2, q3, q4], &Repo.insert!(......)) 
ids  = Enum.map(ids, &Map.get(&1, :id)) 
+0

네,하지만 변수를 재 할당하는 끈적 거리는되지 않습니다

pairs = for q <- [q1, q2, q3, q4] do {q, Repo.insert!(...)} end 

그리고 유사하게 반복 디. – Kuqa

+0

왜 안 되니? 그러나 그렇게하고 싶지 않다면 동일한 메소드를 사용하여 삽입 된 구조체와 함께 튜플을 ID와 함께 반환 할 수 있습니다. – Sheharyar

+0

기다려, 여기서 다시 할당 할 필요는 없지, 그렇지? – Kuqa

1

이 작업을 수행하는 방법에는 여러 가지가 있습니다. 하나는 Enum.zip/2를 사용하여 별도의 ID 목록을 만든 다음 두 목록을 통해 반복하는 것입니다

q1 = "question1" 
q2 = "question2" 
q3 = "question3" 
q4 = "question4" 

ids = Enum.map([q1, q2, q3, q4], &(Repo.insert!(......))) 

for {q, id} <- Enum.zip([q1, q2, q3, q4], ids) do 
    IO.inspect {q, id} 
end 

또 다른 몇 가지 명확한 코드를 여기 for을 사용하고 Enum.map에서 질문/ID 쌍 (반환하는 것입니다하지만 당신은 할 수)뿐만 아니라 Enum.map/2를 사용

for {q, id} <- pairs do 
    IO.inspect {q, id} 
end 
관련 문제