>

그래서 파이썬에서 일 했었고 최근에 C #으로 전환했습니다. C #에서 Python 프로젝트 중 하나를 다시 작성하려고 시도했으며 사전과 관련하여 약간 멈췄습니다. 파이썬 코드의 일부에서 각각 두 개의 키로 사전을 만들고 모든 사전을 목록에 추가했습니다.

slot0 = {"itemID": 0, "amount": 0}
slot1 = {"itemID": 0, "amount": 0}
slot2 = {"itemID": 0, "amount": 0}
inv = [slot0, slot1, slot2]

그런 다음 나중에 사전 목록을 반복하여 두 itemID 의 값을 쉽게 변경할 수있었습니다.  열쇠와 amount  키 :

for slot in inv:
      if slot["item"] == 0:
           slot["item"] = 2
           slot["amount"] += 1
           break

그러나 C #에서는 그렇게 쉬운 일이 아닙니다. 사전을 성공적으로 만들고 목록에 추가했습니다.

Dictionary<string, int> slot0 = new Dictionary<string, int>() { { "itemID", 0 }, { "amount", 0 } };
Dictionary<string, int> slot1 = new Dictionary<string, int>() { { "itemID", 0 }, { "amount", 0 } };
Dictionary<string, int> slot2 = new Dictionary<string, int>() { { "itemID", 0 }, { "amount", 0 } };
List<Dictionary<string, int>> inv = new List<Dictionary<string, int>>();
private void Start()
{
    inv.Add(slot0);
    inv.Add(slot1);
    inv.Add(slot2);
}

그러나 pyzwyz를 복제하는 방법을 잘 모르겠습니다  파이썬 코드에서 루프. 나는 그 for 알아  KeyValuePairs와 함께 사용할 수 있지만 여러 키의 값을 변경할 수는 없습니다. 누구든지 도울 수 있다면 좋을 것입니다. 내 질문이 너무 명확하지 않은 경우 죄송합니다. 명확하게 설명하겠습니다.

foreach
  • 답변 # 1

    이것은 가장 우아한 해결책은 아니지만 파이썬에서 가지고있는 것과 일치합니다. 당신은 foreach 있을거야 -파이썬의 for 를 따르는 목록을 통해  훌륭하게. 그 후, 사전을 slot 로 얻습니다.  키와 함께 인덱서를 사용하여 값을 액세스하고 변경하십시오.

    // I use `var` because I believe it to be more "csharponic" ;).
    foreach (var slot in inv)
    {
        if (slot["itemID"] == 0) {
            slot["itemID"] = 2;
            slot["amount"] += 1;
            break;
        }
    }
    
    

    사전 액세스에 대한 가능한 문제에 대해 배우려면 사전 문서를 확인해야합니다. 내 예에서 사용중인 키가 존재하지 않으면 KeyNotFoundException 로 끝납니다. . 코드를보다 강력하게 만들려면 if 에 키 검사를 추가하십시오.  @Sach이 제안한대로;이렇게 :

    if (slot.ContainsKey("itemID") && slot["itemID"] == 0) { ... }

    완전성을 위해 TryGetValue 를 사용할 수도 있습니다. .

    foreach (var slot in inv)
    {
        var v = 0;
        if (slot.TryGetValue("itemID", out v) && v == 0)
        {
            slot["itemID"] = 2;
            slot["amount"] += 1;
            break;
         }
    }
    
    

    @mjwills가 의견에서 지적했듯이 이점은 주요 조회 수를 줄입니다 ( out 에 대한 자세한 내용).  이것 좀 봐). 와이즈 비즈 Item[]ContainsKey  "접근 O (1).

    TryGetValue

관련 자료

  • 이전 c# - 다른 마크로 문자열 분리
  • 다음 python - Pandas에서 부울 인덱싱을 사용하는 방법