我用谷歌搜索了这个并得到了不完整/矛盾的观点 - 在Ruby/Rails中对一个数组做一个map和做一个实际上有什么区别collect吗?
这些文档似乎没有任何暗示,但是方法或性能可能存在差异吗?
是否有更简洁的方法将dplyr tbl的一列作为向量,从具有数据库后端的tbl(即数据帧/表不能直接是子集)?
require(dplyr)
db <- src_sqlite(tempfile(), create = TRUE)
iris2 <- copy_to(db, iris)
iris2$Species
# NULL
Run Code Online (Sandbox Code Playgroud)
这太容易了,所以
collect(select(iris2, Species))[, 1]
# [1] "setosa" "setosa" "setosa" "setosa" etc.
Run Code Online (Sandbox Code Playgroud)
但它似乎有点笨拙.
从这段代码我不知道两种方法之间的区别,collect和each.
a = ["L","Z","J"].collect{|x| puts x.succ} #=> M AA K
print a.class #=> Array
b = ["L","Z","J"].each{|x| puts x.succ} #=> M AA K
print b.class #=> Array
Run Code Online (Sandbox Code Playgroud) 我有以下格式的数据结构:
data_hash = [
{ price: 1, count: 3 },
{ price: 2, count: 3 },
{ price: 3, count: 3 }
]
Run Code Online (Sandbox Code Playgroud)
有没有一种有效的方法来获得:price像数组一样的值[1,2,3]?
我怎样才能在之后使用collect_set或collect_list使用数据帧groupby.例如:df.groupby('key').collect_set('values').我收到一个错误:AttributeError: 'GroupedData' object has no attribute 'collect_set'
是否可以使用一个电话collect来制作2个新列表?如果没有,我该如何使用partition?
什么是Linq相当于地图!还是收集!Ruby中的方法?
a = [ "a", "b", "c", "d" ]
a.collect! {|x| x + "!" }
a #=> [ "a!", "b!", "c!", "d!" ]
Run Code Online (Sandbox Code Playgroud)
我可以通过使用foreach迭代集合来完成此操作,但我想知道是否有更优雅的Linq解决方案.
我有一群学生.首先,我想用标记对它们进行分组.然后我想进一步将这些集合分组到同名学生中.
Map<Integer,Map<String,List<String>>> groupping = students.stream()
.collect(Collectors.groupingBy(Student::getMarks,
Collectors.mapping(Student::getName,Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说,
非静态方法不能从静态上下文中引用.
是.我非常清楚,如果没有实例,我就无法引用非静态方法.但是对于所有这些流操作,我真的很困惑.
而不是如何解决这个问题; 我真的想知道这里发生了什么.您的任何投入都表示赞赏!
因为如果我写下面的分组是完全有效的;
Map<Integer,List<Student>> m = students.stream().
collect(Collectors.groupingBy(Student::getMarks));
Run Code Online (Sandbox Code Playgroud)
这是我的Student.java类(如果你需要的话)
public class Student {
private String name;
private int marks;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMarks() {
return marks;
}
public void setMarks(int marks) {
this.marks = marks;
}
public Student(String name, int marks) {
this.name = name;
this.marks = marks;
}
@Override
public String toString() { …Run Code Online (Sandbox Code Playgroud) 大多数ruby开发人员都知道如何通过执行以下操作来节省一些按键:
array.map(&:methodname)
Run Code Online (Sandbox Code Playgroud)
而不是
array.map {|x| x.methodname }
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以应用类似的&:methodname快捷方式来调用哈希数组中的"方法"(通过键调用的值)?
在我的情况下,它的JSON api结果以60个批量返回,作为源自JSON的哈希数组.我试图这样做,但没有成功:
array.map(&:"keyname")
Run Code Online (Sandbox Code Playgroud)
但是没有成功,抛出一个NoMethodError并且说Hash没有'keyname'方法,这是合理的我猜.我想知道是否有一些神奇的子弹来模仿这个&:...红宝石家伙已经解决过的哈希的快捷方式.
这是实际的JSON响应之一,我认为仅限于5个结果
[{"geometry":{"location":{"lat":33.723008,"lng":-78.930593}},"icon":"http://maps.gstatic.com/mapfiles/place_api/icons/bowling-71.png","id":"095e108208879fe989f2b36e81e38bafe0c17574","name":"Waccamaw Bowling Center","opening_hours":{"open_now":true},"photos":[{"height":612,"html_attributions":["\u003Ca href=\"https://plus.google.com/106701205257534874835\"\u003EAndy Badi\u003C/a\u003E"],"photo_reference":"CoQBeQAAANZ3d4xBep-4jlCnHp0IcCfSr4k6WVnAMDkPNPhlhSTaZ-NICdLaPVxaRW04qK8ko8x5SDScTeImNKWo2qlyF0JYTQpy-elxdZkx58BYQsjCLdtOaBr_yIoKk3NSuBGk7RS9Lf2IWpW0NaBjeAcPTNdKKHoTt_PZ4212cD67wV0jEhBmRx62d9nUyBmPkrv51nadGhTXEhV-hA5frdzGKal4tEd2pYPtjQ","width":816}],"rating":3.1,"reference":"CoQBeAAAAD5d1gIGf4AG427DlKp-AC74Wt5ZCTd6uPU0-31qTnDRW3mBk4Scq00zjaLpbXnqvs1rlMgEFHPVId9nPGU5oaWr2nYRqRodz5LGdVpZqHx1R_PRciZX7xb068t6c7bqw7Fy_Bs9YIi8pCNdfAdHEZb8Pjxy1mpnL1qN_DBz243eEhCrzUmU34savXzZijjlv8TzGhSX3SofvWtuGYOhhPol9atp3aTSyQ","types":["bowling_alley","establishment"],"vicinity":"101 Philip Gray Drive, Myrtle Beach"},{"geometry":{"location":{"lat":33.817622,"lng":-78.692496}},"icon":"http://maps.gstatic.com/mapfiles/place_api/icons/bowling-71.png","id":"12fed6fbc66c7d9fc693fe37e6834e32ee6e23b9","name":"North Myrtle Beach Bowling Center","photos":[{"height":460,"html_attributions":["\u003Ca href=\"https://plus.google.com/100443525307746960711\"\u003EHolly Heniford\u003C/a\u003E"],"photo_reference":"CpQBhwAAADY5u5bWSEVGRZr1A7LR0Dpli5EEDRvOt5oWvzQYCOvRk1XO9bMBPdKvQYy_TwSHDcRRcqo6JZoGyLc-nLvlOoG1gX133KkdJ7lKU33RC9hdeN_dzfAUoxIrArZK8Ssu2QQWpXmq10xsJKPIu2bAzpS3n3vKqLdeKZY86GPw7LR0cM-Su3P0MZiY2AkC7uIJIhIQkQVG3s7We7yNPlqRqBkE4xoULTYXh2O6PPuki5_TXG3tN1O3kLg","width":816}],"reference":"CpQBgwAAAB0eZVssHlDn56UET5IqUpZygTzWdLclQ73lU0xzgNG875YyQPhQWGvOI2ciZq_BO6yZYzjMIdGEFVI-jnOhj_Y56Eq0T1MaLAL0dIkCM9qS4QwjAv3-TjwJOMBnN7aARHr3BuGqYLQZb5fkN3veUr2tWLKDZcPT1SHXRLypDutO5msurlQLub5YgmNhOomPdxIQLbIFLMxiqssFIUbO6bEcrRoU0A49j-VRMk4vHsSqxADOq5OPo1o","types":["bowling_alley","establishment"],"vicinity":"1105 Highway 17S, North Myrtle Bch"},{"geometry":{"location":{"lat":33.617718,"lng":-78.976797}},"icon":"http://maps.gstatic.com/mapfiles/place_api/icons/bowling-71.png","id":"5b2bcc16481ea7519f5e2858d4aa8af1b836f3c8","name":"Surfside Bowling Center","rating":4.4,"reference":"CoQBeQAAACW_aubzCjtG19Nw9Pm9RIXpzpgXD5rFyKziCYy0Uc7X9g1vVz2YWoDUmXwIYA9uUksSArTypwe8lh76TjYYTnNIPiTXc_dpgw94XGaQwC1dO5DuMBPLtWyKgY4Jqa8UlYdHnTOe4FPJnZV7gTsx25Eid2iasa07gruGui6tltYtEhBpBraa9i7GzEE3FUYWxUU0GhSsfU66SAn8tpT3Oa_PRkTUYLXlCQ","types":["bowling_alley","establishment"],"vicinity":"510 U.S. 17 Business, Surfside Beach"},{"geometry":{"location":{"lat":33.580683,"lng":-79.024837}},"icon":"http://maps.gstatic.com/mapfiles/place_api/icons/bowling-71.png","id":"259104d58ff8e1aebe70db6149c74c736500a069","name":"Frank Theatres","opening_hours":{"open_now":true},"photos":[{"height":400,"html_attributions":[],"photo_reference":"CnRnAAAAq26m02SGow16WCPVIvqioB646tx-kq39g-KPZ6rydR4gUFS2eFF_M3f0-ntrLiq-Iv3jjiQfUdVt_qMxYSAxxOxhfW9JucBG9-Z4ddJH-teNg6p62rHu5Ebbxs-CI40xoK78w3rdLbYA6GsWaOL5gRIQ5UBFXus-gXSy1UrWQ_aiixoUFE0H2eqxYpFyzbGkQtbq4nUHgUk","width":300}],"reference":"CnRvAAAAMDm7HoTk9pG-nKJGvzl9QIw6Qhso44Nh5Q0-xOwM5rykjQ12DJiF_2vZRMaUk9bOtNJwW9ntoBpTgj6bHtWiVCP3OlMu-gd0dgMygMvrIxGTkaR3cTKab0KuHHnoCFxdVB7esI-rK0v585lWS6xTZxIQ0gFfzO3vhZGkIjF6ThDgNBoUAYAMJyjC7f__SBcqOLKbDl3pFSQ","types":["bowling_alley","restaurant","food","movie_theater","establishment"],"vicinity":"10125 Frontage Road #12f, Murrells Inlet"},{"geometry":{"location":{"lat":33.959856,"lng":-78.400399}},"icon":"http://maps.gstatic.com/mapfiles/place_api/icons/bowling-71.png","id":"39a632e654125e6aa73a526579cae55cc14ee4a2","name":"Brunswick County Bowling Center","reference":"CoQBgAAAAETfTwuwFT34ynta7FJFME2kBVM0XurlJJKj3IQMaOXlWqTGU2P2L4l3gX9XP3XkGSgbxsQiOxIpGiTkrKRVV_-EzvGMNeE8IpsmSUMY7SBY-w7SlC6DGtlX1Py-YES6ZSTrM36my9f6Y2s7bAqamlvXbdtGfTgJpycuI0cx28fvEhB7Y-gtYgRCIInlgHxli4ygGhQlgaJt7d4PylH0KJBnzjRJeIKbNA","types":["bowling_alley","establishment"],"vicinity":"630 Village Rd SW, South Brunswick"},{"geometry":{"location":{"lat":33.974945,"lng":-78.396355}},"icon":"http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png","id":"abaf128a51021a535a17b1af4a523a5fc3af7d10","name":"Planet Fun","photos":[{"height":485,"html_attributions":[],"photo_reference":"CnRtAAAACFYcotbimoFO1Jrqiy7PgLZ3Uuq4t1BLKvrewRdsV0aUZ4ay1jwtCaDQ-q2sh7EweO5At2YA3Mg-tukES9UXItwOn2uLD2sXenKg2UhkBSwa-bvd4RGAH-dg0uACDU_0_kCi7xHkv5WrgSiKmBVN8hIQYBr23I1W9dOQ5F6Rdn1wfRoUVBdp3FEoKA_0e29nzlnUem15BJs","width":1024}],"rating":2.8,"reference":"CnRrAAAARZu90zQ_rp_pRX80BxqorM2GecSJ9kUkRnWNWEDx5K5JXwe9qgPdkzMsq8yOxITR1iPmS6knSWKNO-eWhYxBtJSti7O0ar1kkK2lBUhS5Kn6AxuT8bxlyuKLSuiGN3Zi-YFXI6d4nxhL7uO3K8LAnxIQNJ5TMpFhegaM3saANGrubBoUD7D9lw61ng3SmpK4g1dzf1cIVJ4","types":["amusement_park","establishment"],"vicinity":"349 Whiteville Road Northwest, Shallotte"}]
Run Code Online (Sandbox Code Playgroud) 让我们说我们必须使用这段无聊的代码:
ArrayList<Long> ids = new ArrayList<Long>();
for (MyObj obj : myList){
ids.add(obj.getId());
}
Run Code Online (Sandbox Code Playgroud)
切换到Java 8后,我的IDE告诉我我可以用这个代码替换collect call它,并自动生成:
ArrayList<Long> ids = myList.stream().map(MyObj::getId).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但是它给了我这个错误:
Steam中的collect(java.util.stream.Collector)无法应用于:(java.util.stream.Collector,capture,java.util.List>)
我试图铸造参数,但它给我不确定的A和R,而IDE没有给任何建议.
我很好奇你collect call在这种情况下如何使用,我找不到任何可以指导我的信息.任何人都可以光明吗?