我在C#方面很有经验,但对F#和功能编程很新.现在我想在F#中实现一个类库.这是其中一个函数:它取一个整数列表<= 9并改变连续9,如9,9,9,9到9,10,11,12.例如[9; 9; 9; 1; 4; 0; 1; 9; 9; 9; 9]将改为[9; 10; 11; 1; 4; 0; 1; 9; 10; 11; 12.
C#功能很简单:
void ReleaseCap(List<int> items)
{
for (int i = 1; i < items.Count; i++)
{
var current = items[i];
var previous = items[i - 1];
//If curernt value = 9 and previous >=9, then current value should be previous+1
if (current == 9 && previous >= 9)
{
items[i] = previous + 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在是我的F#尾递归.它不是通过索引循环List,而是递归地将项目从初始列表移动到已处理的列表,直到初始列表中的所有内容都消失为止:
let …Run Code Online (Sandbox Code Playgroud) 对于典型的3层应用程序,我看到在许多情况下,它们在数据库中使用了大量复杂的存储过程.我无法从这种方法中获益.根据我个人的理解,这种方法存在以下缺点:
我猜可能有两个好处:
有谁能告诉我使用大量存储过程的好处,而不是让工作在业务逻辑层完成?
我有一个图,每个节点有4个子节点.我写了一个算法来生成从开始节点到结束节点的随机路径.在每个节点,它选择一个随机的下一个节点.可以重新访问访问节点.
代码如下:
public List<Node> GetPath(Node begin, Node end)
{
var nodes = new List<Node>();
var node = begin;
while (node != end)
{
nodes.Add(node);
var next = node.Children[new Random().Next(4)];
node = next;
}
nodes.Add(end);
return nodes;
}
Run Code Online (Sandbox Code Playgroud)
但有时候,Random不能按预期工作."new Random().Next(4)"继续生成0.所以始终是第一个子节点被选择,并且生成一个非常长的重复序列,如node1-> node2-> node1-> node2 ....发生内存不足异常.
有没有办法让Random类正常工作?
我想通过一个数据透视值将[a]分成([a],[a]),我有我的代码
splitList :: (Ord a) => a -> [a] -> ([a],[a])
splitList pivot list =
([x | x <- list, x <= pivot], [x | x <- list, x > pivot])
Run Code Online (Sandbox Code Playgroud)
但它迭代列表两次以生成两个列表,有没有办法只迭代一次?
我得到了一个包含yyyymmddMilliseconds格式的时间数据的表.例如,20100218000051234.如何将其转换为DateTime类型?在SQL Server 2008中.