2015-06-05 20 views
0

方法PrintTimes(string a, int b)列印字符串a,b次(即PrintTimes("test",3)将打印testtesttest)。拥有两个相同大小的参数列表

我想创建一个方法,它将得到一个params字符串数组和params整数数组。所以通话功能将OOK这样

PrintTimes("A","B","C","D",2,1,3,2); 

或者

PrintTimes("A",2,"B",1,"C",3,"D",2) 

两者都将打印AABCCCDD

由于只能有一个params的方法参数,这是不可能的。那么有没有办法做到这一点?

我知道我可以用一个字符串和一个int变量创建一个类,并为这个类创建一个params数组。但我宁愿不要,因为这将涉及构建为什么不使用类

public class PrintParameter 
{ 
    public int Count {get;set;} 
    public string Content{get;set;} 
} 

然后

public void PrintTimes(List<PrintParameter> inputs) 
{ 
    //for each input print the "Content", "Count" times 
} 

或者

public void PrintTimes(params PrintParameter[] inputs) 
{ 
    //for each input print the "Content", "Count" times 
} 

为每一个新的类设置

+1

您可以使用Tuple类来避免编写自己的自定义类。就像'PrintTimes(params Tuple [] args)''。 –

回答

0

如何删除params关键字并取代数组?也就是说,签名PrintTimes(string[], int[])PrintTimes(new[]{"A","B","C","D"}, new[]{2,1,3,2});写得不算多。

2

如果你不想定义一个班级,你可以尝试类似List<KeyValuePair<string,int>>或其他替代方案,如List<Tuple<string,int>>等。但是,首选的方法是使用具有有意义属性的类。

0

有几种方法可以解决这个问题。虽然你只能有一个params,你可以请为参数数组:

PrintTimes(string[] strings, int[] printCounts) 
{ 
    // Assert strings.Length == printCounts.Length 
    for (int i = 0; i < strings.Length; i++) 
    { 
     for (int j = 0; j < printCounts[i]; j++) 
     { 
      // Print strings[i] 
     } 
    } 
} 

然后,它可以被称为是这样的:

int[] numbers = new int[3] {1, 2, 3}; 
string[] names = new string[3] {"Matt", "Joanne", "Robert"}; 
PrintTimes(names, numbers); 
0

对侯赛因的建议,为什么不这样简单的事情跟进为:

void PrintTimes(List<String> strings, List<Int> count)

(或做得一样作为评价所述的阵列)然后内部PrintTimes所需要的我当它们没有时,它们的长度相同或逻辑失败。

相关问题