(1..4).collect do |x|
next if x == 3
x + 1
end # => [2, 3, nil, 5]
# desired => [2, 3, 5]
Run Code Online (Sandbox Code Playgroud)
如果满足条件,next则collect放入nil数组,而我正在尝试做的是,如果满足条件,则不在返回的数组中放置任何元素.这可能不调用delete_if { |x| x == nil }返回的数组吗?
(使用Ruby 1.8.7;我的代码摘录被大量抽象)
在Ruby的最新版本中,许多方法在没有块的情况下被调用时Enumerable返回Enumerator:
[1,2,3,4].map
#=> #<Enumerator: [1, 2, 3, 4]:map>
[1,2,3,4].map { |x| x*2 }
#=> [2, 4, 6, 8]
Run Code Online (Sandbox Code Playgroud)
我想在我自己的方法中做同样的事情,如下:
class Array
def double(&block)
# ???
end
end
arr = [1,2,3,4]
puts "with block: yielding directly"
arr.double { |x| p x }
puts "without block: returning Enumerator"
enum = arr.double
enum.each { |x| p x }
Run Code Online (Sandbox Code Playgroud) 我正在使用Rails 3.1 beta和Ruby 1.9.2以及rake 0.9.2,并且我已经编写了一堆rake任务.这是一个例子:
namespace :data do
desc "dump the nodes and edges for a graph"
task :dump_graph, :species_id, :needs => :environment do |t,args|
args.with_defaults(:species_id => 'Hs')
# ...
end
end
Run Code Online (Sandbox Code Playgroud)
但是,当我的rails应用程序加载这些rake任务时,我现在会为每个rake任务重复一次以下警告:
at /home/user/railsapp/lib/tasks/data/dump_graph.rake:3:in `block in <top (required)>'
WARNING: 'task :t, arg, :needs => [deps]' is deprecated. Please use 'task :t, [args] => [deps]' instead.
Run Code Online (Sandbox Code Playgroud)
我已经尝试过以几种不同的方式重新排列论据,但我不清楚我的任务应该是什么样子.
耙子是否希望我给出个人依赖?如果dep是rails环境,如何在rake任务中定义这些?
更新文档的链接将是一个可接受的答案!我用谷歌搜索和谷歌搜索,但没有运气.
(是的,我意识到格式是在错误消息中给出的.但根据我尝试过的变化,这种格式似乎不正确.)
在boost::numeric::ublas,有三种稀疏矢量类型.
我可以看到它mapped_vector本质上是stl::map从索引到值,它将所有未找到的值视为0(或者是常见值).
但关于compressed_vector和的信息,文件很少(哈哈)coordinate_vector.
有人能够澄清吗?我试图弄清楚向各种向量添加项目的算法复杂性,以及两个这样的向量之间的点积.
一个非常有用的答案提供了compressed_vector与compressed_matrix非常相似.但似乎,例如,压缩行存储仅用于存储矩阵 - 而不仅仅是矢量.
我看到这unbounded_array是存储类型,但我也不太确定规范是什么.如果我创建一个大小为200,000,000但只有5个非零位置的compressed_vector,那么创建一个大小为10和非零位置的compressed_vector会不会有什么效率呢?
非常感谢!
目前我正在阅读David A. Black的"The Well-Grounded Rubyist",我坚持10.9章(枚举器和可枚举的下一个维度).我的问题是关于yield方法.yieldRuby上下文中单词的含义是什么?我的母语是俄语,谷歌翻译向我展示了一堆翻译变体,让我感到困惑.其中有一些:给予,带来,投降(放弃),生产,同意,遵守和许多其他人.
UPD:请注意这个事实,我试图理解Enumerator :: Yielder#yield方法的含义 ,但不是yield关键字本身.
UPD_2:我发现了有关枚举器的有趣文章:" Ruby中的懒惰枚举器 ".
我使用转换一些代码HttpWebRequest来HttpClient.我遇到的一个问题是从内容类型响应头获取charset.
使用时HttpWebRequest,charset暴露在HttpWebResponse.CharacterSet属性中,就像这样
using (WebResponse response = await this.webRequest.GetResponseAsync())
{
string characterSet = ((HttpWebResponse)response).CharacterSet;
Run Code Online (Sandbox Code Playgroud)
您也可以从WebResponse.ContentType属性或内容类型标题中获取它HttpWebResponse.Headers.
使用时HttpClient,ContentType标题中似乎缺少字符集.
这是我正在使用的代码HttpClient:
using (HttpClient httpClient = new HttpClient(httpClientHandler))
{
using (HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(uri, HttpCompletionOption.ResponseContentRead))
{
charset = httpResponseMessage.Content.Headers.ContentType.CharSet;
Run Code Online (Sandbox Code Playgroud)
CharSet属性始终是null. HttpResponseMessage有一个Headers属性,但它不包含content-type标头. HttpResponseMessage.Content还有一个Headers属性,它似乎包含内容类型标题,但该标题显示"Content-Type: text/html"- 它没有charset部分.
HttpWebResponse对于相同的url 使用第一种方法,我得到Content-Type标头的charset部分.我错过了什么吗?
我有一个稀疏矩阵类,它的非零和相应的列索引按行顺序存储在基本上类似STL-vector的容器中.他们可能有未使用的容量,如矢量; 要插入/删除元素,必须移动现有元素.
说我有手术insert_erase_replace,或ier简称.ier给定位置p,列索引j和值,可以执行以下操作v:
v==0,ier删除条目p并左移所有后续条目.v!=0和j已经存在的p,ier在替换单元格内容p有v.v!=0,并且j不存在p,ier则在右移所有后续条目后插入条目v和列索引.jp所以这一切都是微不足道的.
现在让我说我有ier2,它做了同样的事情,除了它采用包含多个列索引j和相应值的列表v.它还有一个大小n,表示列表中存在多少个索引/值对.但由于向量仅存储非零,有时实际插入大小小于n.
仍然微不足道.
但现在让我说我有ier3,不仅仅是一个列表ier2,而是多个列表.这表示编辑稀疏矩阵的切片.
在某些时候,迭代遍历向量,逐个复制它们并ier2在我们到达每个插入点时插入/替换/删除列表索引/值- 样式变得更有效.如果总插入大小会导致我的向量无论如何都需要调整大小,那么我们就这样做了.
鉴于我的向量比列表的总长度大得多,是否有一种算法可以有效地将列表合并到向量中?
到目前为止,这就是我所拥有的:
传递给每个列表ier3表示条目的净删除(左移),净替换(没有移动,因此便宜)或条目的净插入(右移).那里可能还有一些元素的重新安排,但昂贵的部分是净删除和净插入.
要弄清楚有效地进行网络插入或净删除的算法并不难.
当两者中的任何一个发生时,它会更难.
我唯一能想到的就是两次通过:
我们从事系统生物学研究.我们更喜欢使用现有的数据集,因为收集新的生物数据是昂贵的.因此,我们编写的许多脚本只不过是将一个数据集转换为另一个数据集.
最终,我们将结果放在网上 - 越来越多的期刊需要这样的东西.
因此,对我来说,尝试将Rails用于我的项目并不是一个很大的飞跃.我可以设置简单的可重复实验,逐步通过数据库表(例如使用rake)转换数据,并使用像flotomatic和gnuplot 这样的宝石显示结果.如果我需要的东西很快跑,我甚至可以用C编写自定义的宝石++使用水稻,或者使用并行八哥和workling.
最后,我开始怀疑是否有其他人正在使用Rails进行生物信息学或科学研究.
我想,"如果我是一个科学研究Rails宝石,我该怎么办?"
这样的宝石有什么额外的功能?也许迁移适应了一个可以管理的管道?也许更高级的图形功能?内置后台工作?
我有一些大的固定宽度文件,我需要删除标题行.
跟踪迭代器似乎不是很惯用.
# This is what I do now.
File.open(filename).each_line.with_index do |line, idx|
if idx > 0
...
end
end
# This is what I want to do but I don't need drop(1) to slurp
# the file into an array.
File.open(filename).drop(1).each_line do { |line| ... }
Run Code Online (Sandbox Code Playgroud)
这个Ruby的成语是什么?
Enumerable按降序排序的最佳方法是什么?
我一直在做@array.sort.reverse或@array.sort_by{|song| song.title }.reverse
我想我可以做类似的事情@array.sort{|a, b| b.title <=> a.title},但我发现这很难阅读和冗长.
enumerable ×5
ruby ×5
c++ ×2
algorithm ×1
boost ×1
c# ×1
content-type ×1
httpclient ×1
point ×1
rake ×1
ublas ×1
vector ×1
yield ×1