我想收集特定索引下特定数组列表中的所有元素。假设我有这个清单:
def names = ["David", "Arthur", "Tommy", "Jacob"]
我想打印索引2下的所有名字,在这种情况下,将打印“David,Arthur”
现在我可以很容易地使用for循环,甚至是groovy的eachWithIndex()
。问题是我不想遍历所有元素,因为这样做效率不高。而不是那样,我想要跑到特定点。
groovy中有没有这样做的方法,因为我找不到。
提前致谢!
答案 0 :(得分:5)
由于您从索引0开始,take
方法可能是最简单的方法。
public static void main(String[] args) {
String json = "{\"Germany\": {\"Languages\": [\"German\",\"English\",\"Austrian German\"],\"Continent\": \"unknown\",\"Capital\": \"Berlin\" }, \"China\": {\"Language\": [\"Standard Mandarin\",\"Cantenese\",\"English\"],\"Continent\": \"Asia\",\"Capital\": \"Shanghai\" }}";
Gson gson = new Gson();
JsonElement countryJsonElement = gson.fromJson(json, JsonElement.class);
JsonElement germanyJsonElement = countryJsonElement.getAsJsonObject().get("Germany");
boolean updatedFlag = false;
if (germanyJsonElement != null) {
if (germanyJsonElement.getAsJsonObject().get("Continent").getAsString().equalsIgnoreCase("unknown")) {
germanyJsonElement.getAsJsonObject().remove("Continent");
germanyJsonElement.getAsJsonObject().addProperty("Continent", "Europe");
updatedFlag = true;
}
}
if (updatedFlag) {
countryJsonElement.getAsJsonObject().remove("Germany");
countryJsonElement.getAsJsonObject().add("Germany", germanyJsonElement);
System.out.println("Germany continent updated....");
System.out.println(countryJsonElement.toString());
} else {
System.out.println("Germany continent not updated....");
}
}
答案 1 :(得分:2)
使用Ranges:
$string = 'My name is tom';
$arr = explode(' ', $string);
$arr = array_flip($arr);
$searchwords = array("name", "tom");
foreach ($searchwords as $key => $word ) {
if( isset($arr[ $word ]) ) {
echo 'found';
}
使用更多的语法糖:
def names = ["David", "Arthur", "Tommy", "Jacob"]
def idx = 2
def sublist = names[0..idx-1]
sublist.each { n ->
println n
}
答案 2 :(得分:0)
给出清单
def names = ["David", "Arthur", "Tommy", "Jacob"]
您可以使用以下任何选项:
assert [ "Tommy", "Jacob" ] == names[ 2..<4 ]
assert [ "Tommy", "Jacob" ] == names[ 2..-1 ]
assert [ "Tommy", "Jacob" ] == names.subList( 2, 4 )
assert [ "Tommy", "Jacob" ] == names.drop( 2 )
注意,这些方法中的每一个都创建一个新的List实例,因此如果内存考虑因素很重要,那么使用例如跳过元素是有意义的。 eachWithIndex()
方法或类似方法