将数组[“ null”,“ 0”,“ 1”,“ 2”,“ 2”,“ 1”,“ 0”]转换为[“ 1,'1.1','1.1.1','a', 'b','1.1.2','1.2']

时间:2018-09-21 08:41:05

标签: java serialization groovy nested-lists

我已经进行了所有尝试来解决此问题。 :),我寻求帮助。


为了理解:

“空”-段落(-> 1、2、3等)

“数字”-父母的位置。如果父项为“ null”,则第一个子项(-> 1.1、2.4等),否则,如果父项为“ number”,则第二项(-> 1.1.1、2.4.2等),如果父项为“数字”,且具有也是一个父“数字”,那么这是第三项(a,b,c而不是1.1.1.1、1.1.1.2等)。

所以..

[“ null”,“ 0”,“ 1”,“ 2”,“ 2”,“ 1”,“ 0”]至[“ 1,” 1.1“,” 1.1.1“,” a“ ,“ b”,“ 1.1.2”,“ 1.2”]

  • “ null”:第一个元素“ null”-> 1
  • “ 0”:第二个元素的父级位置为0。(父级在旧数组中值为“ null”,在新数组中值为“ 1”)->第一个子节-> 1.1
  • “ 1”:第三个元素的父元素位置为1。(父元素在旧数组中的值为“ 0”或在新数组中的值为“ 1.1”)->第二小节-> 1.1.1
  • “ 2”:第四个元素的父元素在位置2。(父元素在旧数组中的值为“ 1”或在新数组中的值为“ 1.1.1”)->第三小节-> a而不是1.1.1.1
  • “ 2”:第五个元素的父元素在位置2。(父元素在旧数组中的值为“ 1”或在新数组中的值为“ 1.1.1”)->第三小节-> a已经是-> b
  • “ 1”:第六个元素的父元素在位置1。(父元素在旧数组中为“ 0”,在新数组中为“ 1.1”)->第二个子节-> 1.1.1已经-> 1.1.2 < / li>
  • “ 0”:第七个元素的父级位置为0。(父级在旧数组中为“ null”,在新数组中为“ 1”)->第一个子节-> 1.1已经-> 1.2

1 个答案:

答案 0 :(得分:0)


!更新!

我不敢相信,但是我做到了! 如果有帮助,这是我的新代码。

assert testFunction(["null", "0", "0"]) == [1, '1.1', '1.2']
assert testFunction(["null", "0", "1", "2", "null", "4", "5", "6", "null", "8", "9"]) == [1, '1.1', '1.1.1', 'a', 2, '2.1', '2.1.1', 'a', 3, '3.1', '3.1.1']
assert testFunction(["null", "null", "null"]) == [1, 2, 3]
assert testFunction(["null", "null", "1"]) == [1, 2, '2.1']
assert testFunction(["null", "0", "1"]) == [1, '1.1', '1.1.1']
assert testFunction(["null", "0", "null"]) == [1, '1.1', 2]
assert testFunction(["null", "0", "0", "2", "2", "null"]) == [1, '1.1', '1.2', '1.2.1', '1.2.2', 2]
assert testFunction(["null", "0", "1", "2", "2", "2", "2"]) == [1, '1.1', '1.1.1', 'a', 'b', 'c', 'd']
assert testFunction(["null", "0", "1", "2", "2", "1", "0"]) == [1, '1.1', '1.1.1', 'a', 'b', '1.1.2', '1.2']
assert testFunction(["null", "0", "1", "2", "null", "4", "5", "6", "null", "8", "9"]) == [1, '1.1', '1.1.1', 'a', 2, '2.1', '2.1.1', 'a', 3, '3.1', '3.1.1']

def testFunction(array) {
    def count = 1
    def subcount = 1
    char subcountA = 'a'
    def newArray = []
    def value = []

    array.each {
        if (it.isInteger()) {
            value += it as Integer
        }
    }

    def max = value.max()
    if(!max) max = 0

    for(def j = 0 ; j <= max ; j++ ) {
        count = 1
        subcount = 1
        subcountA = 'a'

        for (def i = 0; i < array.size(); i++) {
            def curr_value = array[i]

            if (curr_value == "null") {
                newArray[i] = count
                count++
            }

            if(curr_value == j.toString()) {
                newArray[i] = newArray[j] + "." + subcount
                subcount++

                if(newArray[i].length() > 5) {
                    newArray[i] = subcountA
                    subcountA++
                }
            }
        }
    }

    print(array)
    print(" - ")
    println(newArray)
    return newArray
}