小编Pau*_*aul的帖子

实体框架 - 代码优先 - 无法存储列表<String>

我写了这样的课:

class Test
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    public List<String> Strings { get; set; }

    public Test()
    {
        Strings = new List<string>
        {
            "test",
            "test2",
            "test3",
            "test4"
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

internal class DataContext : DbContext
{
    public DbSet<Test> Tests { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

运行代码后:

var db = new DataContext();
db.Tests.Add(new Test());
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我的数据正在保存但只是保存Id.我没有任何表格,也没有适用于字符串列表的关系.

我究竟做错了什么?我也尝试制作字符串, virtual但它没有改变任何东西.

谢谢您的帮助.

.net c# entity-framework

82
推荐指数
9
解决办法
7万
查看次数

如何在Scala中编写循环函数模拟

如何编写while循环模拟的函数?它应该有2个参数:要执行的条件和表达式.

我尝试了以下方法:

val whileLoop: (Boolean,Any)=>Unit = (condition:Boolean, expression:Any) => {
 expression
 if(condition) whileLoop(condition,expression)
 () }    
Run Code Online (Sandbox Code Playgroud)

但似乎它不起作用,例如我有数组:

val arr = Array[Int](-2,5,-5,9,-3,10,3,4,1,2,0,-20)    
Run Code Online (Sandbox Code Playgroud)

我也有变量i:

var i = 0
Run Code Online (Sandbox Code Playgroud)

我想打印arr的所有元素.我可以使用以下代码执行此操作:

while(i<arr.length) { println(tab(i)); i+=1 }
Run Code Online (Sandbox Code Playgroud)

我想使用我的whileLoop函数做同样的事情.但我不能写参考变量的功能并修改它.我可以使用只有一个元素的数组传递它,例如

val nr = Array(0)
Run Code Online (Sandbox Code Playgroud)

和功能:

val printArray: Array[Int]=>Unit = (n:Array[Int]) => {
 println(arr(n(0)))
 n(0)+=1
 ()
}
Run Code Online (Sandbox Code Playgroud)

然后在我的whileLoop中使用:

whileLoop(nr(0)<arr.length, printArray)
Run Code Online (Sandbox Code Playgroud)

使用上面的代码后,我得到StackOverflowError,nr(0)等于零.还有以下功能:

val printArray: Array[Int]=>Unit = (n:Array[Int]) => {
 println(arr(nr(0)))
 nr(0)+=1
 ()
}
Run Code Online (Sandbox Code Playgroud)

给出相同的结果.

如何在whileLoop中编写正确的函数并使用它来打印所有arr元素?

提前感谢您的建议.

scala function while-loop

15
推荐指数
1
解决办法
7433
查看次数

二叉树广度优先搜索

我正在使用OCaml.我有类型:

type 'a bt = Empty | Node of 'a * 'a bt * 'a bt;;
Run Code Online (Sandbox Code Playgroud)

我也有BST的例子:

let tree = Node(1,Node(2,Node(4,Empty,Empty),Empty),Node(3,Node(5,Empty,Node(6,Empty,Empty)),Empty));
Run Code Online (Sandbox Code Playgroud)

我需要编写函数:breadthBT : 'a bt -> 'a list这将是广度优先搜索遍历.对于上面的示例树,它应该返回[1; 2; 3; 4; 5; 6]

怎么写那个功能?我只能编写以下使用DST的功能:

let rec breadthBT tree =
if tree=Empty then []
else let Node(w,l,r)=tree in (w::breadthBT l)@breadthBT r;;
Run Code Online (Sandbox Code Playgroud)

上面的函数返回(例如树)[1; 2; 4; 3; 5; 6].但我不能写使用BFS的功能.你可以帮帮我吗?

binary-tree ocaml

5
推荐指数
1
解决办法
2081
查看次数

在Scala中将元素从一个列表复制到另一个列表

我想在Scala中创建通用(不变)方法,该方法将元素从源列表复制到目标列表.在Java中,java.util.Collections中copy方法(参见http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#copy%28java.util.List, %20java.util.List%29).我知道在Scala List中是不可变对象所以我想创建并返回新列表.

我写了以下代码:

def copy[T](dest:List[T], src:List[T]):List[T] = {
    if(dest.length<src.length) throw new Exception("IndexOutOfBoundsException")
    else if(src==Nil) dest
    else {
        var ret = dest
        ret = dest.updated(0, src.first)
        var i=1
        val f:(T=>Unit) = a => {
            if(i<src.length) ret=ret.updated(i, src(i))
            i+=1
            ()
        }
        dest.foreach(f)
        ret
    } 
}
Run Code Online (Sandbox Code Playgroud)

但我认为它可以写得更好.你能帮我写出更好的代码吗?提前致谢.

编辑:也许我表达不清楚我想做什么.我有两个列表(scala.collection.immutable.List),例如src(length = x)和dest(length = y> = x).我想用src列表中的元素替换dest列表的前x个元素.

scala copy list

4
推荐指数
1
解决办法
8230
查看次数

标签 统计

scala ×2

.net ×1

binary-tree ×1

c# ×1

copy ×1

entity-framework ×1

function ×1

list ×1

ocaml ×1

while-loop ×1