2014-12-09 2 views
1

다음 코드에서 name, numofmentions, s 및 salience가 필드 인 인스턴스 Player 인스턴스가 있습니다. 두 번째 for 루프에서는 각 플레이어 객체의 val.s 값을 설정합니다. 그런 다음 합쳐서 합계를 만들면 괜찮습니다. 그런 다음 for (3 번째) for 루프에서 각 객체의 val.s에있는 값을 사용하려고하지만 모든 0을 반환합니다. 왜 누군가 말해 줄 수 있니? 당신이 플레이어 인스턴스를 재사용해야하는 경우오브젝트 필드가 값을 유지하지 않습니다

.Select(x => new Player { name = x.Key, numMention = x.Sum(y => y.numMention)}); 

는, 선택 후 ToList를 호출하려고 : 난 그 게으르게 열거 평가, 당신은 LINQ의 선택을 사용하는

for (int i=0;i<players.Count;i++) 
{ 
    myList.Add(new Player {name = players[i], numMention=playersNumMentions[i]}); 
} 

var mySummedList = myList.GroupBy(x => x.name).Select(x => new Player { name = x.Key, numMention = x.Sum(y => y.numMention)}); 

foreach (var val in mySummedList) 
{ 
    if (val.numMention > 50000) //differs for different problems 
    { 
     sql = "SELECT COUNT(Actor1Code) AS S FROM [gdelt-bq:full.events] WHERE Year>=" + predictionDate + " AND (Actor1Code ='" + val.name + "' AND ((Actor2CountryCode = '" + mainPlayer1 + "') OR (Actor2CountryCode='" + mainPlayer2 + "')))"; 
     response = new WebClient().DownloadString(url + "?q=" + Uri.EscapeUriString(sql)); 
     value = JsonValue.Parse(response); 

     result = value as JsonObject; 
     var row = result["modelData"]["rows"][0]; 
     val.s=((int)row["f"][0]["v"]); 

     sumOfS += val.s;     
    }   
} 

foreach (var val in mySummedList) 
{ 
    if (val.numMention > 50000) //differs for different problems 
    {        
     val.salience = val.s/sumOfS; 

     Console.WriteLine(String.Format("{0}: {1}", val.name, val.salience)); 
    } 
} 
+0

예상 출력은 무엇인가에 줄을 변경하는 val.salience 유형을 변경할 수 있습니까? 0과 1 사이에있는 경우,'num'이'int' 인 경우'Sum()'에 의해 반환되는'int'를 사용하여 계산을 수행하지 않도록해야합니다. –

+0

세 번째 루프에서'val.salience'는 항상 0을 의미합니까? – dotctor

+0

출력 (돌출부)은 0과 1 사이이지만 돌출부는 클래스에서 double 유형입니다. – nasim

답변

1

에서 서로 다른 값을 val.s지고 있는지 확인

sumOfS 이후
val.salience = val.s/sumOfS; 

이 큰 val.s보다 크고 정수 나누기이면 결과는 0입니다.

당신은 두 배로

val.salience = val.s/(double)sumOfS; 
2

사전에 도움을 주셔서 감사합니다

+0

당신은 {name = x.Key, numMention = x.Sum (y => y.numMention)})을 대체 할 수 있습니다. {name = x.Key, numMention = x.Sum (y => y.numMention)}). ToList(); ? – nasim

+0

그게 작동하지 않았다 – nasim

0

플레이어가 작동하지 않는 구조체 인 경우 클래스가 변경되면 foreach가 수행되는 대신

foreach(var x.....) 

foreach(Player x....) 

을하고 나는 그것을 때문에이 라인의 생각 0

+0

'mySummedList'가'IEnumerable '이기 때문에'var'을 사용하는 것이 좋습니다. – juharr

관련 문제