Groovy代码-从列表中获取第n个值

时间:2019-04-13 19:29:29

标签: groovy maps

尝试从以下地图中打印出特定值

Map strokes = [1000:['M','?','?'],
               100:['C','D','M'],
               10:['X','L','C'],
               1:['I','V','X']]

换句话说,如果我的值是1234,我希望它基于以罗马数字格式打印的switch语句。这意味着我要打印M的值,然后打印C和C与X和X以及X和I和V,然后将所有内容放到MCCXXXIV的值中。

到目前为止,我正在尝试从键列表1000中打印出第一个字符。

我只能从“密钥列表1000”中获取整个值

输出['M','?','?']

1 个答案:

答案 0 :(得分:0)

您可以按原样转换所有内容,然后替换边框情况,例如:

  • IIII应该是IV
  • IIIII应该是V
  • XXXXX应该是L
  • 依此类推。

我使用地图编写了转换器的脚本:

strokes = [M:1000, C:100, X:10, I:1]
int number = 5555;
int numSize = String.valueOf(number).length();
String roman = ""

 strokes.each { stroke ->
    while ( number >= stroke.value ) {
        number -= stroke.value
        roman += stroke.key
    }
 }
 println "raw: " + roman
 println toRoman(roman)

 private static String toRoman(String number) {
        return number
                .replace("IIIII", "V")
                .replace("IIII", "IV")
                .replace("VV", "X")
                .replace("VIV", "IX")
                .replace("XXXXX", "L")
                .replace("XXXX", "XL")
                .replace("LL", "C")
                .replace("LXL", "XC")
                .replace("CCCCC", "D")
                .replace("CCCC", "CD")
                .replace("DD", "M")
                .replace("DCD", "CM");
}

示例:

5555:

raw: MMMMMCCCCCXXXXXIIIII
MMMMMDLV

1234:

raw: MCCXXXIIII
MCCXXXIV