我目前的结构:
input:
[
{A:A1, B:B1, C:C1, D:D1, E:E1, F:F1, G:G1, H:H1},
{A:A2, B:B2, C:C2, D:D2, E:E2, F:F2, G:G2, H:H2},
{A:A3, B:B3, C:C3, D:D3, E:E3, F:F3, G:G3, H:H3}
...
]
我的目标:
output
[
{"A":[A1, A2, A3 ...]},
{"B":[B1, B2, B3 ...]},
{"C":[C1, C2, C3 ...]},
{"D":[D1, D2, D3 ...]},
{"E":[E1, E2, E3 ...]},
{"F":[F1, F2, F3 ...]},
{"G":[G1, G2, G3 ...]},
{"H":[H1, H2, H3 ...]}
]
其中" A"," B"," C" ...是来自原始对象的文字键,它们现在是对象中的键到其类型的所有值的数组。这通常很简单,除了我需要在整个
中维护密钥这是我到目前为止所尝试过的,但我不确定我的循环结构是否正确。
def ArrayList invertReponse(ArrayList input){
def output = new ArrayList()
for(i=0;i<input[0].size();i++){
def tempObj = {}
def j=0
input[0].each{ key, value ->
tempObj[[input][0][i]][j] = value
j++
}
output.push(tempObj)
}
return output
}
答案 0 :(得分:1)
根据您对输入的假设,您可能希望从以下内容开始:
def input = [[A:'A1', B:'B1', C:'C1'],
[A:'A2', B:'B2', C:'C2'],
[A:'A3', B:'B3', C:'C3']]
def result = input.inject([:]) { map1, map2 ->
(map1.keySet() + map2.keySet())
.inject([:]) {m, k -> m[k] = (map1[k] ?: []) + (map2[k] ?: []); m}
}
result
最终会成为[A:[A1, A2, A3], B:[B1, B2, B3], C:[C1, C2, C3]]
。
我希望有所帮助。
修改强>
重新阅读问题后,我现在看到你真正想要的是一个包含一堆Map的List,每个Map中只有一个键。这可能更接近你想要的......
def input = [[A:'A1', B:'B1', C:'C1'],
[A:'A2', B:'B2', C:'C2'],
[A:'A3', B:'B3', C:'C3']]
def result = []
input.inject([:]) { map1, map2 ->
(map1.keySet() + map2.keySet())
.inject([:]) {m, k -> m[k] = (map1[k] ?: []) + (map2[k] ?: []); m}
}.each { k, v ->
result << [(k):v]
}
有了这个,result
将是[[A:[A1, A2, A3]], [B:[B1, B2, B3]], [C:[C1, C2, C3]]]
。
答案 1 :(得分:1)
另一种方法是利用高阶函数的强大功能:
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="stylesheet" type="text/css" href="css/custom.css">
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/font-awesome.min.css">
<meta name="viewport" content="width=device-width initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Cormorant+Garamond|EB+Garamond|Great+Vibes" rel="stylesheet">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="row">
<div class="col-xs-6 col-sm-4"><img src="https://www.google.com.ph/url?sa=i&rct=j&q=&esrc=s&source=imgres&cd=&cad=rja&uact=8&ved=&url=https%3A%2F%2Fwww.w3schools.com%2Fcss%2Focean.jpg&psig=AOvVaw3Li5y49HHEkCc_jj8yhZQn&ust=1509070722216853"></div>
<div class="col-xs-6 col-sm-4"><img src="https://www.google.com.ph/url?sa=i&rct=j&q=&esrc=s&source=imgres&cd=&cad=rja&uact=8&ved=&url=https%3A%2F%2Fwww.w3schools.com%2Fcss%2Focean.jpg&psig=AOvVaw3Li5y49HHEkCc_jj8yhZQn&ust=1509070722216853"></div>
<div class="col-xs-6 col-sm-4"><img src="https://www.google.com.ph/url?sa=i&rct=j&q=&esrc=s&source=imgres&cd=&cad=rja&uact=8&ved=&url=https%3A%2F%2Fwww.w3schools.com%2Fcss%2Focean.jpg&psig=AOvVaw3Li5y49HHEkCc_jj8yhZQn&ust=1509070722216853"></div>
</div>
<div class="row">
<div class="col-xs-6 col-sm-4"><img src="https://www.google.com.ph/url?sa=i&rct=j&q=&esrc=s&source=imgres&cd=&cad=rja&uact=8&ved=&url=https%3A%2F%2Fwww.w3schools.com%2Fcss%2Focean.jpg&psig=AOvVaw3Li5y49HHEkCc_jj8yhZQn&ust=1509070722216853"></div>
<div class="col-xs-6 col-sm-4"><img src="https://www.google.com.ph/url?sa=i&rct=j&q=&esrc=s&source=imgres&cd=&cad=rja&uact=8&ved=&url=https%3A%2F%2Fwww.w3schools.com%2Fcss%2Focean.jpg&psig=AOvVaw3Li5y49HHEkCc_jj8yhZQn&ust=1509070722216853"></div>
<div class="col-xs-6 col-sm-4"><img src="https://www.google.com.ph/url?sa=i&rct=j&q=&esrc=s&source=imgres&cd=&cad=rja&uact=8&ved=&url=https%3A%2F%2Fwww.w3schools.com%2Fcss%2Focean.jpg&psig=AOvVaw3Li5y49HHEkCc_jj8yhZQn&ust=1509070722216853"></div>
</div>
</body>
</html>