2013-05-09 2 views
1

이 클래스에서는 번호를 사용하여 탐색하는 문자열 메서드를 정의하고 숫자 값에 따라 문자열을 만듭니다.foreach 루프를 LINQ 람다로 변환하는 방법

public class Class1 
{ 
    public string Returnstring (int number) 
    { 
     var dictionary = new Dictionary<int, string>(); 
     dictionary.Add(1, "Test"); 
     dictionary.Add(2, "TestTest"); 
     dictionary.Add(3, "TestTestTest"); 
     string somevalue = string.Empty; 

     foreach (var simple in dictionary) 
     { 
      while (number >= simple.Key) 
      { 
       somevalue += simple.Value; 
       number -= simple.Key; 
      } 
     } 
     return somevalue; 
    } 
} 

저는 foreach 루프를 LINQ 람다로 변환 할 수 있는지 알고 싶습니다.

이것은 클래스에 대해 쓴 테스트 방법입니다.

[TestMethod] 
public void Given_1_when_Returnstring_Then_Should_Return_Test() 
{ 
    Class1 class1=new Class1(); 
    string number = class1.Returnstring(1); 
    string expectedstring= "Test"; 
    Assert.AreEqual(expectedstring, number); 
} 
+2

당신은 무엇을하려고 했습니까? 무엇이 효과가 없었습니까? 단지 당신이 약간의 노력을한다면 당신이 요구하는 것은 매우 간단합니다. –

+0

할 수 있다고하더라도 그렇게해서는 안됩니다. LINQ는 기능 스타일 프레임 워크로 설계되었으며 LINQ 문에서의 작업에는 부작용이 없어야합니다. – JLRishe

+0

그리고이 코드의 목적은 무엇입니까? 보이는 경우 그것은 첫 번째 사전'숫자'의 값을 반복하고 다음 사전의 나머지 부분을 무시합니다. – JLRishe

답변

0

다음 입력에 대한 다음 출력을 원한다는 점을 정확하게 알고 있습니까?

입력 : 1 개 출력 : 시험

입력 : 2 출력 : TestTest

입력 : 3 출력 : TestTestTest

그렇다면, 왜 그냥 somevalue = dictionary[number]을 사용할 수 있습니까?

0

이 시도 : 알고리즘이 잘못 여부

return string.Join("", dictionary.Take(number).Select(x=>x.Value)); 
0
internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      dictionary.Add(1, "Test"); 
      dictionary.Add(2, "TestTest"); 
      dictionary.Add(3, "TestTestTest"); 

      Console.WriteLine("{0}", ReturnResult(3)); 
     } 

     public static Dictionary<int, string> dictionary = new Dictionary<int, string>(); 

     public static string ReturnResult(int index) 
     { 
      return dictionary.Where(x => x.Key.Equals(index)).Select(res => res.Value).First(); 
     } 
    } 
0

은 무엇 본질적 않는 것입니다 것은 시대의 Dictionaryn 수의 첫 번째 항목의 값을 (nnumber 매개 변수 인 반복 통과).

이 당신은 간단하게 할 수있는, 당신이 원하는 무엇을 사실 인 경우 :

string somevalue = string.Join("", Enumerable.Repeat(dictionary.First().Value, number)); 
관련 문제